Apache jest jednym z najpopularniejszych i potężnych serwerów internetowych dostępnych obecnie. Znany z niezawodności, skalowalności i szerokiej gamy funkcji, Apache jest często wybierany jako narzędzie do hostowania stron internetowych, aplikacji internetowych i usług sieciowych.
W tym tutorialu przyjrzymy się podstawowym koncepcjom i funkcjom serwera Apache oraz dowiemy się, jak go skonfigurować i uruchomić na swoim serwerze Ubuntu.
Pierwszym krokiem jest instalacja, wykonujemy ją za pomocą komendy:
sudo apt install apache2
Po wpisaniu tej komendy i poprawnej instalacji voilà mamy zainstalowanego Apacha.
Teraz omówię jak co i jak.
Twoją gotową stronę internetową umieszczasz w katalogu /var/www/html
cd /var/www/html
Natomiast to nie wszystko, w tym katalogu możesz mieć wiele stron www np. ../html/strona1 ../html/strona2 itp.
Aby serwer poprawnie przekierował do odpowiedniego katalogu po wpisaniu odpowiedniego linku musisz ustawić tak zwane virtualhost-y.
Dla przykładu przyjmijmy że masz serwer w sieci lokalnej po adresem:
- 192.168.0.10
oraz ma on DNS który ma podpięte dwie domeny które przekierowują na samego siebie czytaj localhosta:
- testapache1.pl
- testapache2.pl
Aby Apache przekierowywał kolejno:
- testapache1.pl na aplikacje w folderze ../html/strona1
- testapache2.pl na aplikacje w folderze ../html/strona2
Musisz przejść do konfiguracji Apacha, znajduje się ona /etc/apache2/sites-enabled
cd /etc/apache2/sites-enabled
Znajdują się tam dwa pliki:
- 000-default.conf - który jest skrótem do pliku z katalogu /etc/apache2/sites-available
- default-ssl.conf - który jest również plikiem z virtualhost-ami lecz używamy go w gdy mamy wygenerowany certyfikat SSL dla naszej strony
Aktualnie interesuje nas plik 000-default.conf w otwieramy go za pomocą nano
nano 000-default.conf
Po otwarciu aby dodać odpowiednie przekierowanie domeny do katalogu używamy jak już mówiłem virtualhost-a.
Oto przykład takiego wpisu
ServerName testapache1.pl
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/strona1
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Już wyjaśniam co tutaj mamy.
- Tag otwierający Virtualhost-a oraz "*:80" oznacza to, że serwer Apache nasłuchuje na wszystkich adresach IP (znak *) i na porcie 80
- ServerName - tu wpisujemy naszą domenę
- ServerAdmin - to miejsce określa adres e-mail administratora serwera
- DocumentRoot - określa katalog w którym znajduje jest index naszej strony
- ErrorLog oraz CustomLog wskazuje miejsce gdzie mają być zapisywane komunikaty o błędach
default-ssl.conf jest to plik który konfigurujemy w przypadku gdy mamy wygenerowany i wgrany na serwer z Apache certyfikat SSL.
Oto przykładowa klauzura jego konfiguracji
ServerName testapache2.pl ServerAdmin webmaster@localhost DocumentRoot /var/www/html/strona2 ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCertificateFile /etc/letsencrypt/live/testapache2.pl/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/testapache2.pl/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/testapache2.pl/chain.pem SSLOptions +StdEnvVars SSLOptions +StdEnvVars
W tym przypadku virtualhost-y muszą znajdować się w tagu IfModule oraz sam virtualHost nasłuchuje po porcie 443 a nie 80.
Jest tak ponieważ port 80 to port dla protokołu HTTP a port 443 dla HTTPS który jest szyfrowaną wersją HTTP.
ServerName, ServerAdmin, DocumentRoot mają tą samą funkcje co w poprzednio.
Tak naprawdę kolejną ważną klauzurą jest SSLEngine on który uruchamia silnik dla tego czytania certyfikatów SSL.
Następne trzy linijki są niemniej ważne, wskazują one na lokalizacje trzech plików certyfikatu SSL (cert.pem, privkey.pem oraz chain.pem).
Tagi FilesMatch oraz Directory służą konfiguracji SSL, w wielkim skrócie, nie ruszamy tego.
Po poprawnym skonfigurowaniu mam dostęp do szyfrowanego połączenia z naszą stroną,
Lecz połączymy się z nią dopiero gdy ręcznie wpiszemy https://testapache2.pl
Przeglądarka sama nie wykryje czy odwiedzana strona posiada aktywne szyfrowane połączenie, dla tego musimy ustawić aby przekierowywało z połączenia
NIE szyfrowanego na połączenie szyfrowane.
Robimy to za pomocą pliku .htaccess w katalogu naszego pliku index w tym przypadku /var/www/html/strona2
cd /var/www/html/strona2
touch .htaccessnano .htaccess
RewriteEngine On RewriteCond %{HTTPS} !=on RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
W tagu IfModule włączamy RewriteEngine oraz wpisujemy poniższy warunek.
Gdzie RewriteCond to warunek a RewriteRule to zasada która ma sie wykonać w przypadku gdy warunek jest spełniony
Teraz będzie nas automatycznie przekierowywać na HTTPS.
Zapewne teraz się głowisz dla czego to nie działa. Już spieszę z odpowiedzią!
Gdy robisz wpisy czy też je modyfikujesz w plikach 000-default.conf, default-ssl.conf musisz zrestartować swojego Apacha
sudo systemctl restart apache2
sudo a2enmod rewrite